/**
 * 使用Stream处理
 */

var through = require('through2')
var PluginError = require('plugin-error')

const PLUGIN_NAME = 'prefixer-stream'

function prefixStream (prefixText) {
  var stream = through()
  stream.write(prefixText)
  return stream
}

function gulpPrefixer (prefixText) {
  if (!prefixText) {
    throw new PluginError(PLUGIN_NAME, 'Missing prefix text!')
  }

  prefixText = Buffer.from(prefixText) // 预先分配

  var stream = through.obj(function (file, enc, cb) {
    if (file.isBuffer()) {
      this.emit('error', new PluginError(PLUGIN_NAME, 'Buffers not supported!'))
      return cb()
    }

    if (file.isStream()) {
      // 定义转换内容的 streamer
      var streamer = prefixStream(prefixText)
      // 从 streamer 中捕获错误，并发出一个gulp的错误
      streamer.on('error', this.emit.bind(this, 'error'))
      // 开始转换
      file.contents = file.contents.pipe(streamer)
    }

    // 确保文件进去下一个插件
    this.push(file)
    // 告诉 stream 转换工作完成
    cb()
  })

  return stream
}

module.exports = gulpPrefixer
